home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / quikc21.zip / QWIKREF.DOC < prev    next >
Text File  |  1989-07-06  |  79KB  |  1,753 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.                              QWIKC SCREEN UTILITIES
  21.                                  REFERENCE GUIDE
  22.  
  23.                                    Version 2.1
  24.                                   June 1, 1989
  25.  
  26.  
  27.                          Conversion to Turbo C / MS C by
  28.                        Jordan Gallagher / Wisdom Research
  29.  
  30.  
  31.                Copyright (C) 1988,1989 Eagle Performance Software
  32.                               All Rights Reserved.
  33.  
  34.  
  35.  
  36.                                _______
  37.                           ____|__     |               (tm)
  38.                        --|       |    |-------------------
  39.                          |   ____|__  |  Association of
  40.                          |  |       |_|  Shareware
  41.                          |__|   o   |    Professionals
  42.                        -----|   |   |---------------------
  43.                             |___|___|    MEMBER
  44.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  45.  
  46.  
  47.  
  48.                        T A B L E   O F   C O N T E N T S
  49.  
  50.         1. INTRODUCTION  . . . . . . . . . . . . . . . . . . . . . 3
  51.              Purpose . . . . . . . . . . . . . . . . . . . . . . . 3
  52.              Common Parameters . . . . . . . . . . . . . . . . . . 3
  53.              Attributes  . . . . . . . . . . . . . . . . . . . . . 4
  54.  
  55.         2. FUNCTIONS . . . . . . . . . . . . . . . . . . . . . . . 6
  56.              eosc  . . . . . . . . . . . . . . . . . . . . . . . . 6
  57.              eosln . . . . . . . . . . . . . . . . . . . . . . . . 6
  58.              eosr  . . . . . . . . . . . . . . . . . . . . . . . . 6
  59.              eostocursor . . . . . . . . . . . . . . . . . . . . . 6
  60.              eostorc . . . . . . . . . . . . . . . . . . . . . . . 7
  61.              eostorcrel  . . . . . . . . . . . . . . . . . . . . . 7
  62.              getcursor . . . . . . . . . . . . . . . . . . . . . . 7
  63.              get_submodel_id . . . . . . . . . . . . . . . . . . . 7
  64.              gotoeos . . . . . . . . . . . . . . . . . . . . . . . 8
  65.              gotorc. . . . . . . . . . . . . . . . . . . . . . . . 8
  66.              modcursor . . . . . . . . . . . . . . . . . . . . . . 8
  67.              qattr . . . . . . . . . . . . . . . . . . . . . . . . 9
  68.              qattrc  . . . . . . . . . . . . . . . . . . . . . . . 9
  69.              qattreos  . . . . . . . . . . . . . . . . . . . . . . 9
  70.              qeosln  . . . . . . . . . . . . . . . . . . . . . . . 10
  71.              qfill . . . . . . . . . . . . . . . . . . . . . . . . 10
  72.              qfillc  . . . . . . . . . . . . . . . . . . . . . . . 10
  73.              qfilleos  . . . . . . . . . . . . . . . . . . . . . . 11
  74.              qinit . . . . . . . . . . . . . . . . . . . . . . . . 11
  75.              qreadattr . . . . . . . . . . . . . . . . . . . . . . 12
  76.              qreadchar . . . . . . . . . . . . . . . . . . . . . . 12
  77.              qreadstr  . . . . . . . . . . . . . . . . . . . . . . 12
  78.              qreinit . . . . . . . . . . . . . . . . . . . . . . . 12
  79.              qscrolldown . . . . . . . . . . . . . . . . . . . . . 13
  80.              qscrollup . . . . . . . . . . . . . . . . . . . . . . 13
  81.              qscrtovscr  . . . . . . . . . . . . . . . . . . . . . 14
  82.              qstoretomem . . . . . . . . . . . . . . . . . . . . . 15
  83.              qstoretoscr . . . . . . . . . . . . . . . . . . . . . 15
  84.              qviewpage . . . . . . . . . . . . . . . . . . . . . . 16
  85.              qvscrtoscr  . . . . . . . . . . . . . . . . . . . . . 17
  86.              qwrite  . . . . . . . . . . . . . . . . . . . . . . . 18
  87.              qwritec . . . . . . . . . . . . . . . . . . . . . . . 18
  88.              qwriteeos . . . . . . . . . . . . . . . . . . . . . . 19
  89.              qwriteeos_sub . . . . . . . . . . . . . . . . . . . . 19
  90.              qwritepage  . . . . . . . . . . . . . . . . . . . . . 19
  91.              qwrite_sub  . . . . . . . . . . . . . . . . . . . . . 20
  92.              setcursor . . . . . . . . . . . . . . . . . . . . . . 20
  93.              setmultitask  . . . . . . . . . . . . . . . . . . . . 21
  94.              wherec  . . . . . . . . . . . . . . . . . . . . . . . 21
  95.              wherer  . . . . . . . . . . . . . . . . . . . . . . . 22
  96.  
  97.         3. VARIABLES . . . . . . . . . . . . . . . . . . . . . . . 23
  98.              System Hardware . . . . . . . . . . . . . . . . . . . 23
  99.              Video Hardware  . . . . . . . . . . . . . . . . . . . 24
  100.              Video Software  . . . . . . . . . . . . . . . . . . . 26
  101.              Video Cursor  . . . . . . . . . . . . . . . . . . . . 28
  102.  
  103.  
  104.                                        2
  105.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  106.  
  107.  
  108.    1.  I N T R O D U C T I O N
  109.  
  110.  
  111.    PURPOSE
  112.  
  113.    This document is a QWIKC technical reference manual describing each routine
  114.    and variable in detail in a format similar to the Turbo C manual.  The
  115.    routines are described in alphabetical order.  Since this manual is on
  116.    disk, you can find your interest easily with a search utility.
  117.  
  118.    Application - All QWIKC functions will perform in the following
  119.    applications:
  120.  
  121.      . All video text modes - 0, 1, 2, 3 and 7.
  122.      . Any column mode - 40, 80, or variable.
  123.      . For IBM PC, XT, AT, PCjr, PC convertible, all PS/2 models, 3270 PC, and
  124.        compatibles.
  125.      . With MDA, CGA, EGA, MCGA, VGA, 8214/A, all Hercules video cards.
  126.      . Perform routines in absolute coordinates rather than window-relative
  127.        coordinates.
  128.      . Capitalizes on the use of faster multi-tasking video buffers (MTVB).
  129.  
  130.    For window-relative writing routines, see WNDWC21.ARC.
  131.  
  132.  
  133.    COMMON PARAMETERS
  134.  
  135.    Common Parameters - Most functions use the same parameter names.  Rather
  136.    than repeating them for each routine, detailed descriptions for those
  137.    parameters are listed below.
  138.  
  139.    Screen Coordinates - QWIKC routines work in absolute coordinates to give
  140.    you full control of the screen.  The routines do not check for bounds on
  141.    the screen, so be sure to stay in range.  The upper left column on the
  142.    screen is row 1, column 1, which is also called 1-based.  The routines also
  143.    wrap to the next line; they do not truncate at end-of-line.  For example,
  144.    row=1 and col=255 is equivalent to row=3 and col=15 on a screen with 80
  145.    columns.  But this is not a recommended practice for variable screen
  146.    widths.
  147.  
  148.    row/col - row and col were chosen in lieu of the X/Y scheme used in most
  149.    routines.  Since QWIKC is for only text modes, the screen is treated like a
  150.    word processor with rows and columns.  It is more intuitive to use the X/Y
  151.    scheme in graphics and the row/col scheme for text.
  152.  
  153.    coll/colr - In the self-centering routines, the left and right columns are
  154.    simply averaged.  To center on the full width of an 80 column display, set
  155.    coll=1 and colr=80.  To center on a certain column number, set both values
  156.    equal to that column number.  Or, to center on any screen, set coll=1 and
  157.    colr=crt_cols.
  158.  
  159.    rows/cols - Using rows/cols is much easier than row2/col2 to describe the
  160.    height and width of a block such as:
  161.  
  162.       qstoretomem( row, col, rows, cols, myptr );
  163.  
  164.  
  165.                                        3
  166.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  167.  
  168.  
  169.  
  170.    Should you decide to move a block, only row and col need to be changed, and
  171.    therefore rows and cols don't need to be mentally recalculated and altered.
  172.    Please keep cols no greater than crt_cols.  Zero values will simply exit
  173.    the routine.
  174.  
  175.    astr - This parameter contains the address of the string.
  176.  
  177.  
  178.    ATTRIBUTES
  179.  
  180.    attr - Use the convenient attribute macros for the foreground and
  181.    background colors supplied in the header file, for example:
  182.  
  183.      qwrite( 1, 1, WHITE+BLUE_BG, "My String" );
  184.  
  185.    will write the text with white on blue attributes.  The foreground macros
  186.    in QWIKC21.H are duplicates of those in Turbo C's conio.h:
  187.  
  188.      BLACK         0x00       DARKGRAY      0x08
  189.      BLUE          0x01       LIGHTBLUE     0x09
  190.      GREEN         0x02       LIGHTGREEN    0x0A
  191.      CYAN          0x03       LIGHTCYAN     0x0B
  192.      RED           0x04       LIGHTRED      0x0C
  193.      MAGENTA       0x05       LIGHTMAGENTA  0x0D
  194.      BROWN         0x06       YELLOW        0x0E
  195.      LIGHTGRAY     0x07       WHITE         0x0F
  196.      BLINK         0x80
  197.  
  198.    For convenience, background color macros were included so that the
  199.    foreground and background macros could be added for the complete attribute.
  200.  
  201.      BLACK_BG     0x00
  202.      BLUE_BG      0x10
  203.      GREEN_BG     0x20
  204.      CYAN_BG      0x30
  205.      RED_BG       0x40
  206.      MAGENTA_BG   0x50
  207.      BROWN_BG     0x60
  208.      LIGHTGRAY_BG 0x70
  209.      SAMEATTR     -1
  210.  
  211.    SAMEATTR - A powerful and unique feature of all QWIKC routines is the use
  212.    of the macro SAMEATTR.  If SAMEATTR, or a negative value, is used as an
  213.    attribute, the routine will suppress any changes to the attributes and use
  214.    what is currently on the screen.
  215.  
  216.    3270 PC Attributes - Be aware that the 3270 PC ignores the foreground
  217.    intensity bit, so there are only 8 colors.  In addition, 4 colors have
  218.    different tints:
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.                                        4
  227.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  228.  
  229.  
  230.  
  231.      PC Color     3270 PC Color
  232.      ------------ -------------
  233.      Cyan         Turquoise
  234.      Magenta      Pink
  235.      Brown        Yellow
  236.      Light Gray   White
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.                                        5
  288.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  289.  
  290.  
  291.    2.  F U N C T I O N S
  292.  
  293.    In this section, a detailed description is provided for each function.
  294.  
  295.  
  296.    ---------------------------------------------------------------------------
  297.    eosc                                                                  QWIKC
  298.    ---------------------------------------------------------------------------
  299.    Function       Returns the absolute column of the EOS marker.
  300.    Syntax         unsigned char eosc(void);
  301.    Remarks        Operates on the currently written screen.  The upper left
  302.                   corner of the screen (1,1).
  303.    Return value   eosc returns the absolute column of the EOS marker.
  304.    Screens        All video pages and virtual screens.
  305.    See also       eosr, eostorc, eostorcrel, eostocursor, eosln, gotoeos
  306.  
  307.    ---------------------------------------------------------------------------
  308.    eosln                                                                 QWIKC
  309.    ---------------------------------------------------------------------------
  310.    Function       Moves the EOS marker to column 1 of the next row.
  311.    Syntax         void eosln(void);
  312.    Remarks        Operates on the currently written screen.
  313.    Return value   None.
  314.    Screens        All video pages and virtual screens.
  315.    EOS            Updated.
  316.    Restrictions   eosln can increment past the last row of a screen, but does
  317.                   not scroll up the screen.
  318.    See also       eosr, eosc, eostorc, eostorcrel, eostocursor, gotoeos,
  319.                   qeosln
  320.  
  321.    ---------------------------------------------------------------------------
  322.    eosr                                                                  QWIKC
  323.    ---------------------------------------------------------------------------
  324.    Function       Returns the absolute row of the EOS marker.
  325.    Syntax         unsigned char eosr(void);
  326.    Remarks        Operates on the currently written screen.
  327.    Return value   eosr returns the absolute row of the EOS marker.
  328.    Screens        All video pages and virtual screens.
  329.    See also       eosc, eostorc, eostorcrel, eostocursor, eosln, gotoeos
  330.  
  331.    ---------------------------------------------------------------------------
  332.    eostocursor                                                           QWIKC
  333.    ---------------------------------------------------------------------------
  334.    Function       Positions the EOS marker to where the cursor is.
  335.    Syntax         void eostocursor(void);
  336.    Remarks        The EOS marker is simply moved to match the position of the
  337.                   cursor of the currently written video page.
  338.    Return value   None.
  339.    Screens        All video pages only.
  340.    EOS            Updated.
  341.    See also       eosr, eosc, eostorc, eostorcrel, eosln, gotoeos
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.                                        6
  349.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  350.  
  351.  
  352.    ---------------------------------------------------------------------------
  353.    eostorc                                                               QWIKC
  354.    ---------------------------------------------------------------------------
  355.    Function       Positions the EOS marker.
  356.    Syntax         void eostorc( unsigned char row, unsigned char col );
  357.    Remarks        Use this procedure to manually locate the EOS marker.  The
  358.                   q*eos functions will write where this marker is located on
  359.                   the currently written screen.
  360.    Return value   None.
  361.    Screens        All video pages and virtual screens.
  362.    EOS            Updated.
  363.    Restrictions   Stay within the screen limits.
  364.    See also       eosr, eosc, eostorcrel, eostocursor, eosln, gotoeos
  365.  
  366.    ---------------------------------------------------------------------------
  367.    eostorcrel                                                            QWIKC
  368.    ---------------------------------------------------------------------------
  369.    Function       Positions the EOS marker relative to its current position.
  370.    Syntax         void eostorcrel( unsigned char row, unsigned char col );
  371.    Remarks        The relative values can be positive or negative.  The q*eos
  372.                   functions will write where the EOS marker is located on the
  373.                   currently written screen.
  374.    Return value   None.
  375.    Screens        All video pages and virtual screens.
  376.    EOS            Updated.
  377.    Restrictions   Stay within the screen limits.
  378.    See also       eosr, eosc, eostorc, eostocursor, eosln, gotoeos
  379.  
  380.    ---------------------------------------------------------------------------
  381.    getcursor                                                             QWIKC
  382.    ---------------------------------------------------------------------------
  383.    Function       Returns the cursor mode for the CRT.
  384.    Syntax         int getcursor(void);
  385.    Remarks        There is only one cursor mode variable that applies to what
  386.                   is currently viewed on the CRT and it is retrieved from low
  387.                   memory at 0040h:0060h.
  388.    Return value   getcursor returns the cursor mode for the CRT.
  389.    Screens        All video pages only.
  390.    See also       setcursor, modcursor
  391.  
  392.    ---------------------------------------------------------------------------
  393.    get_submodel_id                                                       QWIKC
  394.    ---------------------------------------------------------------------------
  395.    Function       Gets the submodel_id on IBM computers.
  396.    Syntax         void get_submodel_id(void);
  397.    Remarks        The system_id and submodel_id variables are updated if a
  398.                   submodel ID exists.  It will only execute on recent models
  399.                   of XT, AT, and PS/2 models which have this ID.  Otherwise
  400.                   the variables will remain unaltered as set by qinit().
  401.    Return value   None.  The result of the submodel ID check is stored in
  402.                   submodel_id.
  403.    Restrictions   PC or XT clones must recognize IBM's system ID.
  404.    See also       QWIKC21.DOC
  405.  
  406.  
  407.  
  408.  
  409.                                        7
  410.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  411.  
  412.  
  413.    ---------------------------------------------------------------------------
  414.    gotoeos                                                               QWIKC
  415.    ---------------------------------------------------------------------------
  416.    Function       Positions the cursor where the EOS marker is.
  417.    Syntax         void gotoeos(void);
  418.    Remarks        The cursor is simply moved to match the position of the EOS
  419.                   marker of the currently written video page.
  420.    Return value   None.
  421.    Screens        All video pages only.
  422.    EOS            Unaltered.
  423.    See also       eosr, eosc, eostorc, eostorcrel, eostocursor, eosln, gotorc
  424.    Example        Center a string on the screen and place the cursor at the
  425.                   end of the string:
  426.  
  427.                     qwritec( 1, 1, crt_cols, SAMEATTR, "My message " );
  428.                     gotoeos();
  429.  
  430.    ---------------------------------------------------------------------------
  431.    gotorc                                                                QWIKC
  432.    ---------------------------------------------------------------------------
  433.    Function       Positions the cursor.
  434.    Syntax         void gotorc( unsigned char row, unsigned char col );
  435.    Remarks        The cursor is moved to the position absolute to the
  436.                   currently written video page.
  437.    Return value   None.
  438.    Screens        All video pages only.
  439.    EOS            Unaltered.
  440.    Restrictions   Stay within the screen limits.
  441.    See also       gotoeos, wherer, wherec
  442.  
  443.    ---------------------------------------------------------------------------
  444.    modcursor                                                             QWIKC
  445.    ---------------------------------------------------------------------------
  446.    Function       Modifies the current cursor mode to turn on, off, or blink
  447.                   erratically.
  448.    Syntax         void modcursor( int bits13and14 );
  449.    Remarks        Using the modification macros cursor_on, cursor_off, or
  450.                   cursor_blink for bits13and14, the currently viewed cursor
  451.                   mode on the CRT will be modified accordingly.  The function
  452.                   only looks at bits 13 and 14 of bits13and14 for the
  453.                   modification.  The scan lines remain unaltered.
  454.    Return value   None.
  455.    Screens        Any video page as viewed.
  456.    See also       getcursor, setcursor
  457.    Example        To turn the current cursor mode off:
  458.  
  459.                     modcursor( cursor_off );
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.                                        8
  471.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  472.  
  473.  
  474.    ---------------------------------------------------------------------------
  475.    qattr                                                                 QWIKC
  476.    ---------------------------------------------------------------------------
  477.    Function       Changes just the attribute in a rows-by-columns block on the
  478.                   screen.
  479.    Syntax         void qattr( unsigned char row, unsigned char col,
  480.                               unsigned char rows, unsigned char cols,
  481.                               int attr );
  482.    Remarks        The upper left corner of the block starts at (row,col) and
  483.                   the block size is rows by cols.  Note that you can even
  484.                   change 1 row and/or 1 column.  If SAMEATTR is used for attr
  485.                   or if rows or cols is zero, then nothing is written.
  486.    Return value   None.
  487.    Screens        All video pages and virtual screens.
  488.    EOS            Updated.
  489.    Restrictions   Stay within the screen limits.
  490.    See also       qattrc, qattreos
  491.    Example        To create inverse video on any screen:
  492.  
  493.                     qattr( 1, 1, crt_rows, crt_cols, BLACK+LIGHTGRAY_BG );
  494.  
  495.    ---------------------------------------------------------------------------
  496.    qattrc                                                                QWIKC
  497.    ---------------------------------------------------------------------------
  498.    Function       Changes just the attribute in a rows-by-columns block on the
  499.                   screen and centers it between two columns.
  500.    Syntax         void qattrc( unsigned char row, unsigned char coll,
  501.                                unsigned char colr, unsigned char rows,
  502.                                unsigned char cols, int attr );
  503.    Remarks        The upper left corner of the block starts at
  504.                   (row,(coll+colr-cols+1) >> 1) with a block size of rows by
  505.                   cols and centering it between the two columns coll and colr.
  506.                   Odd counts are shifted left.  If SAMEATTR is used for attr
  507.                   or if rows or cols is zero, then nothing is written.
  508.    Return value   None.
  509.    Screens        All video pages and virtual screens.
  510.    EOS            Updated.
  511.    Restrictions   Stay within the screen limits.
  512.    See also       qattr, qattreos
  513.    Example        A 30 character message centered on the screen in row 15,
  514.                   needs to be white on green:
  515.  
  516.                       qattrc( 15, 1, crt_cols, 1, 30, WHITE+GREEN_BG );
  517.  
  518.                   The attribute will start to be changed in column 26 on an 80
  519.                   column screen.
  520.  
  521.    ---------------------------------------------------------------------------
  522.    qattreos                                                              QWIKC
  523.    ---------------------------------------------------------------------------
  524.    Function       Changes just the attribute in a rows-by-columns block on the
  525.                   current screen starting at the EOS marker.
  526.    Syntax         void qattreos( unsigned char rows, unsigned char cols,
  527.                                  int attr );
  528.    Remarks        The upper left corner of the block starts at the previously
  529.  
  530.  
  531.                                        9
  532.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  533.  
  534.  
  535.                   set EOS marker and the block size is rows by cols.  If
  536.                   SAMEATTR is used for attr or if rows or cols is zero, then
  537.                   nothing is written.
  538.    Return value   None.
  539.    Screens        All video pages and virtual screens.
  540.    EOS            Updated.
  541.    Restrictions   Stay within the screen limits.
  542.    See also       qattr, qattrc
  543.    Example        To highlight a 20 column data entry field at the EOS marker
  544.                   with yellow on magenta:
  545.  
  546.                     qattreos( 1, 20, YELLOW+MAGENTA_BG );
  547.  
  548.    ---------------------------------------------------------------------------
  549.    qeosln                                                                QWIKC
  550.    ---------------------------------------------------------------------------
  551.    Function       Moves the EOS marker to column 1 of the next row with a
  552.                   possible scroll up.
  553.    Syntax         void qeosln(void);
  554.    Remarks        Operates on the currently written screen.  If eosr becomes
  555.                   greater than crt_rows, then the screen will scroll up.  The
  556.                   new blank row will have the attribute set by scroll_attr
  557.                   which must be manually set before hand.  scroll_attr is
  558.                   defined in QWIKC21.H.
  559.    Return value   None.
  560.    Screens        All video pages and virtual screens.
  561.    EOS            Updated to first cleared column of the cleared row.
  562.    See also       eosr, eosc, eostorc, eostorcrel, eostocursor, gotoeos, eosln
  563.  
  564.    ---------------------------------------------------------------------------
  565.    qfill                                                                 QWIKC
  566.    ---------------------------------------------------------------------------
  567.    Function       Fills the screen with a character with an optional attribute
  568.                   change in a rows-by-columns block on the current screen.
  569.    Syntax         void qfill( unsigned char row, unsigned char col,
  570.                               unsigned char rows, unsigned char cols,
  571.                               int attr, unsigned char ch );
  572.    Remarks        The upper left corner of the block starts at (row,col) and
  573.                   the block size is rows by cols.  If SAMEATTR is used for
  574.                   attr, then the attribute will remain the same on the screen.
  575.                   If rows or cols is zero, then nothing is written.
  576.    Return value   None.
  577.    Screens        All video pages and virtual screens.
  578.    EOS            Updated.
  579.    Restrictions   Stay within the screen limits.
  580.    See also       qfillc, qfilleos
  581.    Example        To clear the screen with black on brown attribute:
  582.  
  583.                     qfill( 1, 1, crt_rows, crt_cols, BLACK+BROWN_BG, ' ' );
  584.  
  585.    ---------------------------------------------------------------------------
  586.    qfillc                                                                QWIKC
  587.    ---------------------------------------------------------------------------
  588.    Function       Fills the screen with a character and an optional attribute
  589.                   change in a rows-by-columns block on the current screen and
  590.  
  591.  
  592.                                        10
  593.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  594.  
  595.  
  596.                   centers it between two columns.
  597.    Syntax         void qfillc( unsigned char row, unsigned char coll,
  598.                                unsigned char colr, unsigned char rows,
  599.                                unsigned char cols, int attr,
  600.                                unsigned char ch );
  601.    Remarks        The upper left corner of the block starts at
  602.                   (row,(coll+colr-cols+1) >> 1) with a block size of rows by
  603.                   cols and centered between the two columns coll and colr.
  604.                   Odd counts are shifted left.  If SAMEATTR is used for attr,
  605.                   then the attribute will remain the same on the screen.  If
  606.                   rows or cols is zero, then nothing is written.
  607.    Return value   None.
  608.    Screens        All video pages and virtual screens.
  609.    EOS            Updated.
  610.    Restrictions   Stay within the screen limits.
  611.    See also       qfill, qfilleos
  612.    Example        Center 20 dashes on the screen in rows 1 to 5 with black on
  613.                   brown attributes:
  614.  
  615.                     qfillc( 1, 1, crt_cols, 5, 20, BLACK+BROWN_BG, '-' );
  616.  
  617.    ---------------------------------------------------------------------------
  618.    qfilleos                                                              QWIKC
  619.    ---------------------------------------------------------------------------
  620.    Function       Fills the screen with a character with an optional attribute
  621.                   change in a rows-by-columns block on the current screen
  622.                   starting at the EOS marker.
  623.    Syntax         void qfilleos( unsigned char rows, unsigned char cols,
  624.                                  int attr, unsigned char ch );
  625.    Remarks        The upper left corner of the block starts at the previously
  626.                   set EOS marker and the block size is rows by cols.  If
  627.                   SAMEATTR is used for attr, then the attribute will remain
  628.                   the same on the screen.  If rows or cols is zero, then
  629.                   nothing is written.
  630.    Return value   None.
  631.    Screens        All video pages and virtual screens.
  632.    EOS            Updated.
  633.    Restrictions   Stay within the screen limits.
  634.    See also       qfill, qfillc
  635.    Example        To clear a 20 column data entry field at the EOS marker with
  636.                   yellow on magenta:
  637.  
  638.                     qfilleos( 1, 20, YELLOW+MAGENTA_BG, ' ' );
  639.  
  640.    ---------------------------------------------------------------------------
  641.    qinit                                                                 QWIKC
  642.    ---------------------------------------------------------------------------
  643.    Function       Detects system, display, and video card(s).  Initializes
  644.                   global data for QWIKC routines.
  645.    Syntax         void qinit(void);
  646.    Remarks        qinit() must be called at the start of your program to
  647.                   initialize QWIKC. qreinit() should be called if there is a
  648.                   text mode change.
  649.    Return value   None.  QWIKC's global variables are set to match the video
  650.                   configuration of your system.
  651.  
  652.  
  653.                                        11
  654.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  655.  
  656.  
  657.    EOS            Set to (1,1).
  658.    See also       qreinit(), QWIKC21.DOC, QINITEST.C, VARIABLES section below.
  659.  
  660.    ---------------------------------------------------------------------------
  661.    qreadattr                                                             QWIKC
  662.    ---------------------------------------------------------------------------
  663.    Function       Reads an attribute from the current screen.
  664.    Syntax         unsigned char qreadattr( unsigned char row,
  665.                                            unsigned char col );
  666.    Remarks        Reads an attribute from the screen at just one location.
  667.    Return value   qreadattr returns the attribute read from the screen.
  668.    Screens        All video pages and virtual screens.
  669.    EOS            Unaltered.
  670.    See also       qreadchar, qreadstr
  671.  
  672.    ---------------------------------------------------------------------------
  673.    qreadchar                                                             QWIKC
  674.    ---------------------------------------------------------------------------
  675.    Function       Reads a character from the current screen.
  676.    Syntax         unsigned char qreadchar( unsigned char row,
  677.                                            unsigned char col );
  678.    Remarks        Reads a character from the screen at just one location.
  679.    Return value   qreadchar returns the character read from the screen.
  680.    Screens        All video pages and virtual screens.
  681.    EOS            Unaltered.
  682.    See also       qreadattr, qreadstr
  683.  
  684.    ---------------------------------------------------------------------------
  685.    qreadstr                                                              QWIKC
  686.    ---------------------------------------------------------------------------
  687.    Function       Reads a text string from the current screen.
  688.    Syntax         void qreadstr( char far *astr, unsigned char row,
  689.                                  unsigned char col, unsigned char cols );
  690.    Remarks        Reads a string of characters from the screen, storing it in
  691.                   the location pointed to by astr.
  692.    Return value   None.
  693.    Screens        All video pages and virtual screens.
  694.    EOS            Unaltered.
  695.    See also       qreadattr, qreadchar
  696.  
  697.    ---------------------------------------------------------------------------
  698.    qreinit                                                               QWIKC
  699.    ---------------------------------------------------------------------------
  700.    Function       Detects system, display, and video card(s).  Reinitializes
  701.                   global data for QWIKC routines.
  702.    Syntax         void qreinit(void);
  703.    Remarks        qreinit() must be called after changing text modes to re-
  704.                   initialize QWIKC. qinit() must be called at the start of
  705.                   your program.
  706.    Return value   None.  QWIKC's global variables are reset to match the new
  707.                   text mode and video configuration of your system.
  708.    EOS            Set to (1,1).
  709.    See also       qinit(), QWIKC21.DOC, QINITEST.C, VARIABLES section below.
  710.  
  711.  
  712.  
  713.  
  714.                                        12
  715.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  716.  
  717.  
  718.    ---------------------------------------------------------------------------
  719.    qscrolldown                                                           QWIKC
  720.    ---------------------------------------------------------------------------
  721.    Function       Scrolls a rows-by-columns block down on the current screen
  722.                   and clears the top row of the block.
  723.    Syntax         void qscrolldown( unsigned char row, unsigned char col,
  724.                                     unsigned char rows, unsigned char cols,
  725.                                     int blankattr );
  726.    Remarks        To keep it simple, the block encompasses all affected rows
  727.                   including the row to be cleared.  The upper left corner of
  728.                   the block starts at (row,col) and the block size is rows by
  729.                   cols.  The bottom row will be scrolled out and lost while
  730.                   the top row will be cleared with the attribute of blankattr
  731.                   (SAMEATTR is permitted).  Note that you can even change 1
  732.                   row and/or 1 column.  The cursor is not moved, but is ready
  733.                   to be moved with gotoeos.  The cpuid lets the routine choose
  734.                   the best speed.
  735.    Return value   None.
  736.    Screens        All video pages and virtual screens.
  737.    EOS            Updated to first cleared column of the cleared row.
  738.    Restrictions   Stay within the screen limits.
  739.    See also       qscrollup, gotoeos
  740.    Example        To scroll down the entire screen and clear the top row with
  741.                   light cyan on blue:
  742.  
  743.                     qscrolldown( 1,1, crt_rows, crt_cols, LIGHTCYAN+BLUE_BG );
  744.  
  745.    ---------------------------------------------------------------------------
  746.    qscrollup                                                             QWIKC
  747.    ---------------------------------------------------------------------------
  748.    Function       Scrolls a rows-by-columns block up on the current screen and
  749.                   clears the bottom row of the block.
  750.    Syntax         void qscrollup( unsigned char row, unsigned char col,
  751.                                   unsigned char rows, unsigned char cols,
  752.                                   int blankattr );
  753.    Remarks        To keep it simple, the block encompasses all affected rows
  754.                   including the row to be cleared.  The upper left corner of
  755.                   the block starts at (row,col) and the block size is rows by
  756.                   cols.  The first row will be scrolled out and lost while the
  757.                   last row will be cleared with the attribute of blankattr
  758.                   (SAMEATTR is permitted).  Note that you can even change 1
  759.                   row and/or 1 column.  The cursor is not moved, but is ready
  760.                   to be moved with gotoeos.  The cpuid lets the routine choose
  761.                   the best speed.
  762.    Return value   None.
  763.    Screens        All video pages and virtual screens.
  764.    EOS            Updated to first cleared column of the cleared row.
  765.    Restrictions   Stay within the screen limits.
  766.    See also       qscrolldown, gotoeos
  767.    Example        To scroll up the entire screen and clear the last row with
  768.                   light cyan on blue:
  769.  
  770.                     qscrollup( 1, 1, crt_rows, crt_cols, LIGHTCYAN+BLUE_BG );
  771.  
  772.  
  773.  
  774.  
  775.                                        13
  776.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  777.  
  778.  
  779.    ---------------------------------------------------------------------------
  780.    qscrtovscr                                                            QWIKC
  781.    ---------------------------------------------------------------------------
  782.    Function       Copies a rows-by-columns block on the current screen to
  783.                   another location on a virtual screen.
  784.    Syntax         void qscrtovscr( unsigned char row, unsigned char col,
  785.                                    unsigned char rows, unsigned char cols,
  786.                                    unsigned char vrow, unsigned char vcol,
  787.                                    unsigned char vwidth, void far *vscrptr );
  788.    Remarks        row, col, rows, and cols locates the block on the current
  789.                   screen (scr) as specified by qscr.  This block will be
  790.                   copied to the virtual screen (vscr) at the location of vrow
  791.                   and vcol.  But since vscr may have a different column width
  792.                   than scr, vwidth sets the width.  vscrptr is the base ad-
  793.                   dress of the virtual screen.  By changing qscr, you can even
  794.                   copy blocks from one virtual screen to another!  Only the
  795.                   scr side checks for possible snow.
  796.    Return value   None.
  797.    Screens        All video pages and virtual screens.
  798.    EOS            Unaltered.
  799.    Restrictions   Stay within the screen limits.  Not intended for copying
  800.                   between video pages (esp. CGA).
  801.    See also       qvscrtoscr
  802.    Example        Copy a 12x40 block from the CRT screen at (5,10) to a
  803.                   virtual screen at (3,2) and look at the result on the CRT:
  804.  
  805.      #include <stdio.h>
  806.      #include <conio.h>
  807.      #include "qwikc21.h"
  808.  
  809.      #define vscrrows 20
  810.      #define vscrcols 60
  811.  
  812.      /* Storage size in bytes required is: rows * cols << 1 */
  813.      int vscr[vscrrows][vscrcols];     /* 20 x 60 virtual screen */
  814.      vscr_t crt,myvscr;
  815.  
  816.      main() {
  817.          qinit();
  818.  
  819.          /* create specs for virtual screen */
  820.          myvscr.vrows=vscrrows;
  821.          myvscr.vcols=vscrcols;
  822.          myvscr.vsize=sizeof(vscr);
  823.          myvscr.vsnow=0;                /* qwikest when 0 */
  824.          myvscr.veosofs=0;
  825.          myvscr.vscrptr=𝓋
  826.  
  827.          qfill( 1, 1, crt_rows, crt_cols, WHITE+BLUE_BG, '*' ); /* Fill CRT */
  828.          crt=qscr;                                        /* Save CRT specs */
  829.          qscr=myvscr;                                  /* Set virtual specs */
  830.          qfill(1, 1, vscrrows, vscrcols, BLACK+BROWN_BG, '?'); /* Fill vscr */
  831.          qscr=crt;                                     /* Restore CRT specs */
  832.          qscrtovscr( 5, 10, 12, 40, 3, 2, vscrcols, vscr );   /* Copy block */
  833.          qstoretoscr( 1, 1, vscrrows, vscrcols, vscr );      /* Take a look */
  834.  
  835.  
  836.                                        14
  837.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  838.  
  839.  
  840.          getch();
  841.  
  842.          return;
  843.      }
  844.  
  845.    ---------------------------------------------------------------------------
  846.    qstoretomem                                                           QWIKC
  847.    ---------------------------------------------------------------------------
  848.    Function       Saves a rows-by-columns block from the current screen to
  849.                   memory.
  850.    Syntax         void qstoretomem( unsigned char row, unsigned char col,
  851.                                     unsigned char rows, unsigned char cols,
  852.                                     void far *dest );
  853.    Remarks        row, col, rows, and cols locates the block on the current
  854.                   screen as specified by qscr.  This block will be copied to
  855.                   dest, the destination, as one contiguous array.  By changing
  856.                   qscr, you can even save blocks from virtual screens!  Be
  857.                   sure to set qsnow to false for the fastest speed on virtual
  858.                   screens.
  859.    Return value   None.
  860.    Screens        All video pages and virtual screens.
  861.    EOS            Unaltered.
  862.    Restrictions   Stay within the screen limits.  Not intended for copying
  863.                   between video pages (esp. CGA).
  864.    See also       qstoretoscr
  865.    Example        Save a 12x40 block from the CRT screen at (5,10), clear the
  866.                   screen, and restore the block:
  867.  
  868.      #include <stdio.h>
  869.      #include <conio.h>
  870.      #include "qwikc21.h"
  871.  
  872.      #define memrows 12
  873.      #define memcols 40
  874.  
  875.      /* Storage size in bytes required is: rows * cols >> 1 */
  876.      int block[memrows][memcols];    /* 12 x 40 block */
  877.  
  878.      main() {
  879.          qinit();
  880.          qfill( 1, 1, crt_rows, crt_cols, WHITE+BLUE_BG, '*'); /* Fill CRT */
  881.          qstoretomem( 5, 10, memrows, memcols, block );      /* Save block */
  882.          qfill(1,1, crt_rows, crt_cols, YELLOW+BLACK_BG,' '); /* Clear CRT */
  883.          qstoretoscr( 5, 10, memrows, memcols, block );     /* Take a look */
  884.          getch();
  885.  
  886.          return;
  887.      }
  888.  
  889.    ---------------------------------------------------------------------------
  890.    qstoretoscr                                                           QWIKC
  891.    ---------------------------------------------------------------------------
  892.    Function       Writes a rows-by-columns block to the current screen from
  893.                   memory.
  894.    Syntax         void qstoretoscr( unsigned char row, unsigned char col,
  895.  
  896.  
  897.                                        15
  898.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  899.  
  900.  
  901.                                     unsigned char rows, unsigned char cols,
  902.                                     void far *source );
  903.    Remarks        row and col locates the upper left corner of the block on
  904.                   the current screen as specified by qscr.  A block will be
  905.                   written from source, which is one contiguous array, and
  906.                   placed on the screen as a rows-by-cols block.  By changing
  907.                   qscr, you can even place blocks to virtual screens!  Be sure
  908.                   to set qsnow to 0 for the fastest speed on virtual screens.
  909.    Return value   None.
  910.    Screens        All video pages and virtual screens.
  911.    EOS            Unaltered.
  912.    Restrictions   Stay within the screen limits.  Not intended for copying
  913.                   between video pages (esp. CGA).
  914.    See also       qstoretomem
  915.    Example        Save a 12x40 block from the CRT screen at (5,10) in the
  916.                   heap, clear the screen, and restore the block:
  917.  
  918.      #include <stdio.h>
  919.      #include <conio.h>
  920.      #include <stdlib.h>
  921.      #include "qwikc21.h"
  922.  
  923.      #define memrows 12
  924.      #define memcols 40
  925.  
  926.      /* Storage size in bytes required is: rows * cols << 1 */
  927.      int *block;
  928.  
  929.      main() {
  930.          qinit();
  931.          qfill( 1, 1, crt_rows, crt_cols, WHITE+BLUE_BG, '*' ); /* Fill CRT */
  932.          block=malloc(memrows * memcols << 1);              /* Reserve heap */
  933.          qstoretomem( 5, 10, memrows, memcols, block );       /* Save Block */
  934.          qfill(1,1, crt_rows, crt_cols, YELLOW+BLACK_BG, ' '); /* Clear CRT */
  935.          qstoretoscr( 5, 10, memrows, memcols, block );      /* Take a look */
  936.          free(block);                                          /* Free heap */
  937.          getch();
  938.          return;
  939.      }
  940.  
  941.    ---------------------------------------------------------------------------
  942.    qviewpage                                                             QWIKC
  943.    ---------------------------------------------------------------------------
  944.    Function       Changes the video page to be viewed on the CRT.
  945.    Syntax         void qviewpage( char pagenum );
  946.    Remarks        Standard C routines are dedicated only to video page 0.
  947.                   However, most video cards, except MDA and some 3270 PC, have
  948.                   more than one video page.  This procedure enables you to
  949.                   view those pages.  The number of video pages available is
  950.                   detected by qinit and saved in maxpage.  pagenum is 0-based
  951.                   and the routine will only view other pages when pagenum <=
  952.                   maxpage.  The macro videopage is used to get/set the
  953.                   currently viewed page.
  954.    Return value   None.
  955.    Screens        All video pages.
  956.  
  957.  
  958.                                        16
  959.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  960.  
  961.  
  962.    EOS            Unaltered.
  963.    See also       qwritepage, QWIKC21D.DOC, QINITEST.C
  964.  
  965.    ---------------------------------------------------------------------------
  966.    qvscrtoscr                                                            QWIKC
  967.    ---------------------------------------------------------------------------
  968.    Function       Copies a rows-by-columns block from a virtual screen to
  969.                   another location on the current screen.
  970.    Syntax         void qvscrtoscr( unsigned char row, unsigned char col,
  971.                                    unsigned char rows, unsigned char cols,
  972.                                    unsigned char vrow, unsigned char vcol,
  973.                                    unsigned char vwidth, void far *vscrptr );
  974.    Remarks        row, col, rows, and cols locates the destination on the
  975.                   current screen (scr) as specified by qscr.  A block will be
  976.                   copied from the virtual screen (vscr) at the location of
  977.                   vrow and vcol.  But since vscr may have a different column
  978.                   width than scr, vwidth sets the width.  vscrptr is the base
  979.                   address of the virtual screen.  By changing qscr, you can
  980.                   even copy blocks from one virtual screen to another!  Only
  981.                   the scr side checks for possible snow.
  982.    Return value   None.
  983.    Screens        All video pages and virtual screens.
  984.    EOS            Unaltered.
  985.    Restrictions   Stay within the screen limits.  Not intended for copying
  986.                   between video pages (esp. CGA).
  987.    See also       qscrtovscr
  988.    Example        Copy a 12x40 block from the CRT screen at (5,10) to a
  989.                   virtual screen at (3,2) and look at the result on the CRT:
  990.  
  991.      #include <stdio.h>
  992.      #include <conio.h>
  993.      #include "qwikc21.h"
  994.  
  995.      #define vscrrows 20
  996.      #define vscrcols 60
  997.  
  998.      /* Storage size in bytes required is: rows * cols << 1 */
  999.      int vscr[vscrrows][vscrcols];     /* 20 x 60 virtual screen */
  1000.      vscr_t crt,myvscr;
  1001.  
  1002.      main() {
  1003.          qinit();
  1004.  
  1005.          /* create specs for virtual screen */
  1006.          myvscr.vrows=vscrrows;
  1007.          myvscr.vcols=vscrcols;
  1008.          myvscr.vsize=sizeof(vscr);
  1009.          myvscr.vsnow=0;             /* qwikest when 0 */
  1010.          myvscr.veosofs=0;
  1011.          myvscr.vscrptr=𝓋
  1012.  
  1013.          qfill( 1, 1, crt_rows, crt_cols, WHITE+BLUE_BG, '*' ); /* Fill CRT */
  1014.          crt=qscr;                                        /* Save CRT specs */
  1015.          qscr=myvscr;                                  /* Set virtual specs */
  1016.          qfill(1, 1, vscrrows, vscrcols, BLACK+BROWN_BG, '?'); /* Fill vscr */
  1017.  
  1018.  
  1019.                                        17
  1020.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1021.  
  1022.  
  1023.          qscr=crt;                                     /* Restore CRT specs */
  1024.          qscrtovscr( 5, 10, 12, 40, 3, 2, vscrcols, vscr );   /* Copy Block */
  1025.          qstoretoscr( 1, 1, vscrrows, vscrcols, vscr );      /* Take a look */
  1026.          getch();
  1027.  
  1028.          return;
  1029.      }
  1030.  
  1031.    ---------------------------------------------------------------------------
  1032.    qwrite                                                                QWIKC
  1033.    ---------------------------------------------------------------------------
  1034.    Function       Writes a string to the current screen with an optional
  1035.                   attribute change.
  1036.    Syntax         void qwrite( unsigned char row, unsigned char col,
  1037.                                int attr, char far *astr );
  1038.    Remarks        This routine writes the string astr at (row,col) with the
  1039.                   attribute attr.  If SAMEATTR is used for attr, then the
  1040.                   attribute will remain the same on the screen.
  1041.    Return value   None.
  1042.    Screens        All video pages and virtual screens.
  1043.    EOS            Updated.
  1044.    Restrictions   Stay within the screen limits.
  1045.    See also       qwritec, qwrite_sub, qwriteeos, qwriteeos_sub
  1046.    Example        Write the string "Important" at (2,1) with the attribute of
  1047.                   flashing white on red:
  1048.  
  1049.                     qwrite( 2, 1, BLINK+WHITE+RED_BG, "Important" );
  1050.  
  1051.    ---------------------------------------------------------------------------
  1052.    qwritec                                                               QWIKC
  1053.    ---------------------------------------------------------------------------
  1054.    Function       Writes a string to the current screen with an optional
  1055.                   attribute change and centered between two columns.
  1056.    Syntax         void qwritec( unsigned char row, unsigned char coll,
  1057.                                 unsigned char colr, int attr,
  1058.                                 char far *astr );
  1059.    Remarks        This routine writes the string astr at (row,(coll+colr-
  1060.                   strlen(astr)+1) >> 1) which centers it between the two
  1061.                   columns coll and colr and has the attribute attr.  If
  1062.                   SAMEATTR is used for attr, then the attribute will remain
  1063.                   the same on the screen.
  1064.    Return value   None.
  1065.    Screens        All video pages and virtual screens.
  1066.    EOS            Updated.
  1067.    Restrictions   Stay within the screen limits.
  1068.    See also       qwrite, qwrite_sub, qwriteeos, qwriteeos_sub
  1069.    Example        Write a message centered on the screen in row 15 with black
  1070.                   on green attributes:
  1071.  
  1072.                     qwritec( 15, 1, crt_cols, WHITE+GREENBG, "My message" );
  1073.  
  1074.                   The message will be written in column 36 on an 80 column
  1075.                   screen.
  1076.  
  1077.  
  1078.  
  1079.  
  1080.                                        18
  1081.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1082.  
  1083.  
  1084.    ---------------------------------------------------------------------------
  1085.    qwriteeos                                                             QWIKC
  1086.    ---------------------------------------------------------------------------
  1087.    Function       Writes a string to the current screen with an optional
  1088.                   attribute change starting at the EOS marker.
  1089.    Syntax         void qwriteeos( int attr, char far *astr );
  1090.    Remarks        This routine writes the string astr at the EOS marker with
  1091.                   the attribute attr.  If SAMEATTR is used for attr, then the
  1092.                   attribute will remain the same on the screen.
  1093.    Return value   None.
  1094.    Screens        All video pages and virtual screens.
  1095.    EOS            Updated.
  1096.    Restrictions   Stay within the screen limits.
  1097.    See also       qwrite, qwrite_sub, qwritec, qwriteeos_sub
  1098.    Example        Highlight the number in the following message:
  1099.  
  1100.                     qwrite( 1, 1, WHITE+BLUE_BG, "There are" );
  1101.                     qwriteeos( YELLOW+BLUE_BG, " 5 " );
  1102.                     qwriteeos( WHITE+BLUE_BG, "minutes left." );
  1103.  
  1104.                   which will write "There are 5 minutes left." as white on
  1105.                   blue except "5" will be yellow on blue.
  1106.  
  1107.    ---------------------------------------------------------------------------
  1108.    qwriteeos_sub                                                         QWIKC
  1109.    ---------------------------------------------------------------------------
  1110.    Function       Writes an array (or string) with a specified length to the
  1111.                   current screen with an optional attribute change starting at
  1112.                   the EOS marker.
  1113.    Syntax         void qwriteeos_sub( int attr, int length, char far *astr );
  1114.    Remarks        This routine writes length characters of the string pointed
  1115.                   to by astr at the previously set EOS marker with the
  1116.                   attribute attr.  This enables you to write substrings when
  1117.                   specifying a starting index (astr[i]).  (Other routines like
  1118.                   qwriteeos stop at the null-terminating character.)  Of
  1119.                   course, astr can be any char array or char pointer.  If
  1120.                   SAMEATTR is used for attr, then the attribute will remain
  1121.                   the same on the screen.
  1122.    Return value   None.
  1123.    Screens        All video pages and virtual screens.
  1124.    EOS            Updated.
  1125.    Restrictions   Stay within the screen limits.
  1126.    See also       qwrite_sub, qwritec, qwriteeos,
  1127.    Example        The following code will write "Testing step B"  with the
  1128.                   existing screen attributes:
  1129.  
  1130.                     strcpy( mystr, "Now for step B: Testing out this line." );
  1131.                     qwrite_sub( 1, 5, SAMEATTR, 8, &mystr[16] );
  1132.                     qwriteeos_sub( SAMEATTR, 6, &mystr[8]);
  1133.  
  1134.    ---------------------------------------------------------------------------
  1135.    qwritepage                                                            QWIKC
  1136.    ---------------------------------------------------------------------------
  1137.    Function       Changes the video page on which the QWIKC routines write.
  1138.    Syntax         void qwritepage( char pagenum );
  1139.  
  1140.  
  1141.                                        19
  1142.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1143.  
  1144.  
  1145.    Remarks        Standard C routines are dedicated to only video page 0.
  1146.                   However, most video cards, except MDA and some 3270 PC, have
  1147.                   more than one video page.  This function enables QWIKC
  1148.                   routines to write to those pages by altering qscrofs and
  1149.                   qvideo_page which is the current page on which QWIKC is
  1150.                   writing. The number of video pages available is detected by
  1151.                   qinit() and saved in maxpage.  The routine will only change
  1152.                   pages when pagenum <= maxpage.
  1153.    Return value   None.
  1154.    Screens        All video pages.
  1155.    EOS            Unaltered.
  1156.    See also       qviewpage, QWIKC21.DOC, QINITEST.C
  1157.  
  1158.    ---------------------------------------------------------------------------
  1159.    qwrite_sub                                                            QWIKC
  1160.    ---------------------------------------------------------------------------
  1161.    Function       Writes an array (or string) with a specified length to the
  1162.                   current screen with an optional attribute change.
  1163.    Syntax         void qwrite_sub( unsigned char row, unsigned char col,
  1164.                                    int attr, int length, char far *astr );
  1165.    Remarks        This routine writes length characters of the string astr at
  1166.                   (row,col) with the attribute attr.  This enables you to
  1167.                   write substrings when specifying a starting index (astr[i]).
  1168.                   (Other routines like qwrite stop at the null-terminating
  1169.                   character.)  Of course, astr can be any char array or char
  1170.                   pointer.  If SAMEATTR is used for attr, then the attribute
  1171.                   will remain the same on the screen.
  1172.    Return value   None.
  1173.    Screens        All video pages and virtual screens.
  1174.    EOS            Updated.
  1175.    Restrictions   Stay within the screen limits.
  1176.    See also       qwrite, qwritec, qwriteeos, qwriteeos_sub
  1177.    Example        The following code will write "Testing out this line." with
  1178.                   the existing screen attributes:
  1179.  
  1180.                      strcpy( mystr, "Step B: Testing out this line." );
  1181.                      qwrite_sub( 1, 1, SAMEATTR, 22, &mystr[9] );
  1182.  
  1183.    ---------------------------------------------------------------------------
  1184.    setcursor                                                             QWIKC
  1185.    ---------------------------------------------------------------------------
  1186.    Function       Sets a new cursor mode for the CRT.
  1187.    Syntax         void setcursor( int cursor );
  1188.    Remarks        Using the default cursor variables set by qinit and/or the
  1189.                   cursor macros, a new cursor mode can be set by with any
  1190.                   combination of:
  1191.  
  1192.                     cursor_initial       - detected by qinit at startup
  1193.                     cursor_underline     - set by qinit
  1194.                     cursor_halfblock     - set by qinit
  1195.                     cursor_block         - set by qinit
  1196.                     cursor_off   ($2000) - turns cursor off
  1197.                     cursor_blink ($6000) - erratic blinking (MDA/CGA)
  1198.  
  1199.                   You can simply add them together (logically ORing is best to
  1200.  
  1201.  
  1202.                                        20
  1203.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1204.  
  1205.  
  1206.                   prevent carry errors, but arithmetic addition is fine).
  1207.                   Although a separate cursor location is kept for each video
  1208.                   page, there is only one cursor mode for the CRT screen.
  1209.    Screens        Any video page as viewed.
  1210.    See also       getcursor, modcursor
  1211.    Example 1      Set a half-block cursor with erratic blink:
  1212.  
  1213.                     setcursor( cursor_halfblock+cursor_blink );
  1214.  
  1215.    Example 2      Set the scan lines for a block cursor, but leave it turned
  1216.                   off:
  1217.  
  1218.                     setcursor( cursor_block+cursor_off );
  1219.  
  1220.    Example 3      Restore the cursor mode at start up and be sure it's turned
  1221.                   on:
  1222.  
  1223.                     setcursor( cursor_initial );
  1224.                     modcursor( cursor_on );
  1225.  
  1226.                   or, for those comfortable with bit operations:
  1227.  
  1228.                     setcursor( cursor_initial & !cursor_blink );
  1229.  
  1230.    ---------------------------------------------------------------------------
  1231.    setmultitask                                                          QWIKC
  1232.    ---------------------------------------------------------------------------
  1233.    Function       Set QWIKC variables to write direct to multi-tasking video
  1234.                   buffers (MTVB).
  1235.    Syntax         void setmultitask(void);
  1236.    Remarks        This function alters the following variables if the program
  1237.                   is running under a multi-tasking environment and the user
  1238.                   has chosen to use the faster MTVB.  If there is no multi-
  1239.                   tasking environment or the MTVB is not used (normal direct
  1240.                   screen video), then these variables are unaltered.  If you
  1241.                   use Turbo C's conio routines, be sure to set directvideo to
  1242.                   0 when using the MTVB.
  1243.  
  1244.                     qscrptr     - the segment is altered, but the offset is
  1245.                                   usually 0.
  1246.                     page0seg    - set to match qscrseg to indicate page 0.
  1247.                     qsnow       - set to 0.
  1248.                     inmultask   - 1 if using MTVB, otherwise set to 0.
  1249.  
  1250.    See also       inmultask in VARIABLES section below.
  1251.  
  1252.    ---------------------------------------------------------------------------
  1253.    wherec                                                                QWIKC
  1254.    ---------------------------------------------------------------------------
  1255.    Function       Returns the absolute column of the cursor on the currently
  1256.                   written video page.
  1257.    Syntax         unsigned char wherec(void);
  1258.    Remarks        Operates on the currently written video page.  The upper
  1259.                   left corner of the screen (1,1).
  1260.    Return value   None.
  1261.  
  1262.  
  1263.                                        21
  1264.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1265.  
  1266.  
  1267.    Screens        All video pages only.
  1268.    See also       gotorc, wherer
  1269.  
  1270.    ---------------------------------------------------------------------------
  1271.    wherer                                                                QWIKC
  1272.    ---------------------------------------------------------------------------
  1273.    Function       Returns the absolute row of the cursor on the currently
  1274.                   written video page.
  1275.    Syntax         unsigned char wherer(void);
  1276.    Remarks        Operates on the currently written video page.  The upper
  1277.                   left corner of the screen (1,1).
  1278.    Return value   None.
  1279.    Screens        All video pages only.
  1280.    See also       gotorc, wherec
  1281.    ---------------------------------------------------------------------------
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.                                        22
  1325.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1326.  
  1327.  
  1328.    3.  V A R I A B L E S
  1329.  
  1330.    The variables in QWIKC are initialized according to the the kind of system,
  1331.    display(s), and video adapter(s) that qinit detects.  QWIKC uses them for
  1332.    reference and they may also be used in your own programming to help make
  1333.    decisions.
  1334.  
  1335.  
  1336.    SYSTEM HARDWARE
  1337.  
  1338.    System Hardware Variables - These variables indicate the kind of computer
  1339.    that qinit detected:
  1340.  
  1341.      Variable      Description
  1342.      ------------  -----------------------------------------------------------
  1343.      cpuid         (Type: char) Intel CPU identification code.  cpuid can be
  1344.                    equal to any one of the following four marcos:
  1345.  
  1346.                      cpu8086  - Intel 8086/8088
  1347.                      cpu80186 - Intel 80186/80188
  1348.                      cpu80286 - Intel 80286
  1349.                      cpu80386 - Intel 80386
  1350.  
  1351.      system_id     (Type: char) Code for the IBM computer in use, set by
  1352.                    qinit.  See submodel_id for values.
  1353.  
  1354.      submodel_id   (Type: char) Code for the sub-model of the IBM computer in
  1355.                    use.  This value defaults to 0 the first time qinit is run.
  1356.                    To get a value, execute get_submodel_id.
  1357.  
  1358.                      SysID Submodel SYSTEM
  1359.                      ----- -------- ------------------------------
  1360.                      0xFF    n/a    IBM PC
  1361.                      0xFE    n/a    IBM PC XT
  1362.                      0xFD    n/a    IBM PCjr
  1363.                      0xFC    n/a    IBM PC AT (6 MHz, 01/10/84)
  1364.                              0x00   IBM PC AT (6 MHz, 06/10/85)
  1365.                              0x01   IBM PC AT (8 MHz, 11/15/85)
  1366.                              0x02   IBM PC XT (286)
  1367.                              0x04   IBM PS/2 model 50
  1368.                              0x05   IBM PS/2 model 60
  1369.                      0xFB    0x00   IBM PC XT (256/640)
  1370.                      0xFA    0x00   IBM PS/2 model 30
  1371.                              0x01   IBM PS/2 model 25
  1372.                      0xF9    0x00   IBM PC Convertible
  1373.                      0xF8    0x00   IBM PS/2 model 80 (16 MHz)
  1374.                              0x04   IBM PS/2 model 80 (20 MHz)
  1375.                              0x09   IBM PS/2 model 70 (16 MHz)
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.                                        23
  1386.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1387.  
  1388.  
  1389.    VIDEO HARDWARE
  1390.  
  1391.    Video Hardware Variables - These variables indicate the kind of video
  1392.    card(s) and display(s) that qinit detected:
  1393.  
  1394.      Variable              Description
  1395.      -------------         ---------------------------------------------------
  1396.      active_disp_dev       (Type: char) Code for the Active Display Device.
  1397.                            Using IBM's Display Combination Code (DCC), qinit
  1398.                            detects the video adapter combined with the video
  1399.                            display.  The codes have been set to the following
  1400.                            macros.  Note that monochrome is odd and color is
  1401.                            even:
  1402.  
  1403.                              Macro      Code  Description
  1404.                              ---------- ----- --------------------------------
  1405.                              no_display 0x00  No display
  1406.                              mda_mono   0x01  MDA with 5151 monochrome display
  1407.                              cga_color  0x02  CGA with 5153/4 color display
  1408.                              dcc3       0x03  reserved
  1409.                              ega_color  0x04  EGA with 5153/4 color
  1410.                              ega_mono   0x05  EGA with 5151 monochrome
  1411.                              pgc_color  0x06  PGC with 5175 color
  1412.                              vga_mono   0x07  VGA with analog monochrome
  1413.                              vga_color  0x08  VGA with analog color
  1414.                              dcc9       0x09  reserved
  1415.                              dcc10      0x0A  reserved
  1416.                              mcga_mono  0x0B  MCGA with analog monochrome
  1417.                              mcga_color 0x0C  MCGA with analog color
  1418.                              n/a        0x0D to 0xFE - reserved
  1419.                              unknown    0xFF  unknown device
  1420.  
  1421.      active_disp_dev_3270  (Type: char) Code for the Active Display Device on
  1422.                            the 3270 PC.  Only the 0xFF code corresponds to the
  1423.                            macro "unknown".
  1424.  
  1425.                              Code  Monitor       Adapter
  1426.                              ----  ------------  ---------------------
  1427.                              0x00  5151 or 5272  for 5151 or 5272
  1428.                              0x01  3295          for 3295
  1429.                              0x02  5151 or 5272  for 5151 or 5272 plus
  1430.                                                  XGA graphics
  1431.                              0x03  5279          3270 PC G
  1432.                              0x04  5379 C01      3270 PC GX
  1433.                              0x05  5379 M01      3270 PC GX
  1434.                              0x06  reserved
  1435.                              0x07  reserved
  1436.                              0xFF  Unknown, not a 3270 PC
  1437.  
  1438.      alt_disp_dev          (Type: char) Code for the Alternate Display Device.
  1439.                            This code is detected by qinit for a second (but
  1440.                            inactive) adapter and display, just in case there
  1441.                            are dual monitors.  It uses the same macros as
  1442.                            active_disp_dev listed above.
  1443.  
  1444.  
  1445.  
  1446.                                        24
  1447.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1448.  
  1449.  
  1450.      alt_disp_dev_pcc      (Type: int) Code for the Alternate Display adapter
  1451.                            on the PC Convertible.  In hex, it corresponds to
  1452.                            the model number of the attached device:
  1453.  
  1454.                              Model   Description
  1455.                              ------  --------------------
  1456.                              0x   0  No alternate adapter
  1457.                              0x5140  LCD
  1458.                              0x5153  CGA type
  1459.                              0x5151  Monochrome type
  1460.  
  1461.      cardseg               (Type: int) Video segment address of the video
  1462.                            "card" as detected by qinit.
  1463.  
  1464.      cardsnow              (Type: char) Set to 1 for wait-for-retrace for the
  1465.                            video "card" as detected by qinit.
  1466.  
  1467.      egainfo               (Type: macro) Returns the value at 0x0040:0x0087
  1468.                            which has the following information when the EGA
  1469.                            (or VGA) is present:
  1470.  
  1471.                              Bits  Description
  1472.                              ----  -------------------------------------------
  1473.                              7     (0) Clear, (1) Keep video data after
  1474.                                    video mode set
  1475.                              6,5   (00) 64k, (01), 128k, (10) 192k, (11) 256k,
  1476.                                    memory on the card.
  1477.                              4     Reserved
  1478.                              3     (0) EGA active, (1) EGA not active
  1479.                              2     (0) Disable,    (1) Enable wait-for-display
  1480.                              1     (0) CD/ECD      (1) MD attached
  1481.                              0     (0) Active,     (1) Inactive CD emulation
  1482.  
  1483.      egaswitches           (Type: macro) Using the value this macro points to,
  1484.                            you can determine the monitor connected to the EGA,
  1485.                            the alternate video system, and the start up
  1486.                            default.  The byte is a copy of how the dip
  1487.                            switches are set on the card where on=0 and off=1.
  1488.                            The primary is the default.  When the ECD is set
  1489.                            for 640x200, it is emulating the CD including the
  1490.                            cursor mode.  qinit directly tests for the
  1491.                            alternate device rather than assuming it.
  1492.  
  1493.                              Switch    Primary             Secondary
  1494.                              --------  ------------------- -------------------
  1495.                              0000 = 0  MDA + MD            EGA + CD - 40x25
  1496.                              0001 = 1  MDA + MD            EGA + CD - 80x25
  1497.                              0010 = 2  MDA + MD            EGA + ECD (640x200)
  1498.                              0011 = 3  MDA + MD            EGA + ECD (640x350)
  1499.                              0100 = 4  CGA + CD - 40x25    EGA + MD
  1500.                              0101 = 5  CGA + CD - 80x25    EGA + MD
  1501.                              0110 = 6  EGA + CD - 40x25    MDA + MD
  1502.                              0111 = 7  EGA + CD - 80x25    MDA + MD
  1503.                              1000 = 8  EGA + ECD (640x200) MDA + MD
  1504.                              1001 = 9  EGA + ECD (640x350) MDA + MD
  1505.  
  1506.  
  1507.                                        25
  1508.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1509.  
  1510.  
  1511.                              1010 =10  EGA + MD            CGA + CD - 40x25
  1512.                              1011 =11  EGA + MD            CGA + CD - 80x25
  1513.  
  1514.      have_3270             (Type: char) If qinit detects 3270 PC equipment or
  1515.                            software, this variable is set to 1.  In addition,
  1516.                            the active_disp_dev is either mda_mono or
  1517.                            cga_color.  Note that there may or may not be
  1518.                            graphics capability in either case; qinit is not
  1519.                            meant to detect graphics.  See active_disp_dev_3270
  1520.                            for codes.
  1521.  
  1522.      have_ps2              (Type: char) qinit sets have_ps2 to true if the DCC
  1523.                            is supported.  This means that the program has
  1524.                            detected a PS/2 video card whether it is integrated
  1525.                            on a model 30, a PS/2 Display Adapter installed on
  1526.                            an IBM XT, or the like.  It also means that either
  1527.                            MCGA or VGA is present, but not necessarily active.
  1528.                            To know which, just check the DCC.
  1529.  
  1530.      herc_model            (Type: char) Model of the attached Hercules video
  1531.                            card.  If no card is detected, then
  1532.                            herc_model=no_herc.
  1533.  
  1534.                              Macro         Code  Description
  1535.                              ------------  ----  ---------------------
  1536.                              no_herc        0    No Hercules card
  1537.                              hgc_mono       1    HGC
  1538.                              hgc_plus       2    HGC Plus
  1539.                              herc_incolor   3    Hercules InColor Card
  1540.  
  1541.      maxpage               (Type: char) Maximum possible 0-based video page
  1542.                            number.  See TABLE 1 in QWIKC21.DOC for ranges.
  1543.  
  1544.  
  1545.    VIDEO SOFTWARE
  1546.  
  1547.    Video Software Variables - These variables indicate the current video mode
  1548.    and screen characteristics to which QWIK is writing and what is being
  1549.    viewed on the CRT.  There are several pointer macros listed that duplicate
  1550.    some of the global variables, i.e., crtcolumns and crt_cols.  It is
  1551.    preferable to use the global ones, where the pointer macros are only needed
  1552.    for handling exceptions.
  1553.  
  1554.      Variable      Description
  1555.      ------------  -----------------------------------------------------------
  1556.      crt_cols      (Type: macro) Defined as qscr.vcols (current virtual/actual
  1557.                    screen columns).  qscr.vcols is initialized by
  1558.                    qinit/qreinit to the currently viewed number of CRT columns
  1559.                    for any card or video mode.
  1560.  
  1561.      crtcolumns    (Type: macro) Defined to directly access the 1-based
  1562.                    currently viewed number of CRT columns for any card or
  1563.                    video mode.  This pseudo-variable may be assigned a value,
  1564.                    as well as evaluated.
  1565.  
  1566.  
  1567.  
  1568.                                        26
  1569.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1570.  
  1571.  
  1572.      crt_rows      (Type: macro) Defined as qscr.vrows (current virtual/actual
  1573.                    screen rows).  qscr.vrows is initialized by qinit/qreinit
  1574.                    to the currently viewed number of CRT rows for any card or
  1575.                    video mode.
  1576.  
  1577.      egafontsize   (Type: macro) Defined to directly access the 1-based number
  1578.                    of horizontal scan lines per character for EGA/MCGA/VGA.
  1579.                    This pseudo-variable may be assigned a value, as well as
  1580.                    evaluated.
  1581.  
  1582.      egarows       (Type: macro) Defined to directly access the 0-based number
  1583.                    of rows on the current screen for EGA, MCGA, and VGA.  This
  1584.                    number is used to set crt_rows, which is done by qinit.
  1585.                    egarows may be assigned a value as well as evaluated.
  1586.  
  1587.      inmultitask   (Type: char)  This flag indicates if MTVB is being used
  1588.                    for the screen in lieu of the normal screen.  It defaults
  1589.                    to 0 and is possibly altered with setmultitask if the
  1590.                    multitasking software has be instructed to expect writing
  1591.                    direct to the MTVB (not direct screen).
  1592.  
  1593.      page0seg      (Type: unsigned int) Segment for the base page, page 0.  In
  1594.                    multitasking environments, change this value to its video
  1595.                    display buffer.  qscrseg and qscrofs should also be set.
  1596.  
  1597.      qeosofs       (Type: macro) Defined as vscr.veosofs, the 0-based offset
  1598.                    where q*eos functions will write.
  1599.  
  1600.      qscrseg       (Type: macro) Acesses the segment of vscr.vscrptr, the
  1601.                    segment for QWIKC writing which is altered when changing
  1602.                    pages.  qscrseg=page0seg on page 0.
  1603.  
  1604.      qscrofs       (Type: unsigned int) Offset for QWIKC writing needed for
  1605.                    virtual screens.  The usual value is 0 for the video pages.
  1606.  
  1607.      qscrptr       Combines qscrseg and qscrofs
  1608.  
  1609.      qscr          (Type: vscr_t) Structure containing essential variables for
  1610.                    QWIKC screen writing.  This structure has several macros
  1611.                    that access its members:
  1612.  
  1613.                      Macro      qscr member
  1614.                      --------   -----------
  1615.                      crt_rows   vrows
  1616.                      crt_cols   vcols
  1617.                      crt_size   vsize
  1618.                      qsnow      vsnow
  1619.                      qeosofs    veosofs
  1620.                      qscrptr    vscrptr
  1621.  
  1622.                    These macros are also described in this section.  Since
  1623.                    they are part of a structure, qscr's members can be swapped
  1624.                    easily when writing to virtual screens.  See the example
  1625.                    under qvscrtoscr.
  1626.  
  1627.  
  1628.  
  1629.                                        27
  1630.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1631.  
  1632.  
  1633.      qsnow         (Type: macro) Set to 1 for wait-for-retrace (snow) while
  1634.                    QWIKC is writing.
  1635.  
  1636.      qvideo_page   (Type: char) Video page to which QWIKC is writing which is
  1637.                    set by qwritepage.  It is initially 0.
  1638.  
  1639.      qvideo_mode   (Type: char) Video mode detected by qinit.
  1640.  
  1641.      scroll_attr   (Type: int) The attribute used to clear the blank row when
  1642.                    qeosln is used.
  1643.  
  1644.      videomode     (Type: macro) Defined to directly access the current video
  1645.                    mode in low memory.  This pseudo-variable may be assigned
  1646.                    a value, as well as evaluated.
  1647.  
  1648.      videopage     (Type: macro) Defined to directly access the currently
  1649.                    viewed video page in low memory.  This pseudo-variable may
  1650.                    be assigned a value, as well as evaluated.
  1651.  
  1652.      vscr_t        The typedef for the structure of essential variables for
  1653.                    QWIKC screen writing to virtual screens.  This enables an
  1654.                    easy exchange of data between the CRT and virtual screens.
  1655.  
  1656.  
  1657.    VIDEO CURSOR
  1658.  
  1659.    Video Cursor Variables and Macros - These variables and constants give you
  1660.    easy tools to combine with bit operations to display your choice of cursor
  1661.    modes.  The variables default with the cursor on and no skew which are
  1662.    detected and set by qinit at startup:
  1663.  
  1664.      Variable           Description
  1665.      -----------------  --------------------------------------------------------
  1666.      cursor_block       (Type: unsigned int) Cursor mode value for the full
  1667.                         cell.
  1668.  
  1669.      cursor_half_block  (Type: unsigned int) Cursor mode value for a half
  1670.                         block usually used for insert editing.
  1671.  
  1672.      cursor_initial     (Type: unsigned int) Cursor mode value detected at
  1673.                         startup.
  1674.  
  1675.      cursor_underline   (Type: unsigned int) Cursor mode value for the normal
  1676.                         underline.
  1677.  
  1678.  
  1679.      Macro         Value   Description
  1680.      ------------  ------  ---------------------------------------------------
  1681.      cursor_blink  0x6000  Used to alter bits 13/14 to create erratic blinking
  1682.                            on MDA/CGA cards.  (EGA/VGA cards turn the cursor
  1683.                            off.)
  1684.  
  1685.      cursor_off    0x2000  Used to alter bits 13/14 or can be used by itself
  1686.                            to turn the cursor off.
  1687.  
  1688.  
  1689.  
  1690.                                        28
  1691.    QWIKC Screen Utilities                        Reference Guide, Version 2.1
  1692.  
  1693.  
  1694.      cursor_on     0x0000  Used to alter bits 13/14 in modcursor to turn the
  1695.                            cursor back on.
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.  
  1724.  
  1725.  
  1726.  
  1727.  
  1728.  
  1729.  
  1730.  
  1731.  
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.  
  1741.  
  1742.  
  1743.  
  1744.  
  1745.  
  1746.  
  1747.  
  1748.  
  1749.  
  1750.  
  1751.                                        29
  1752. 
  1753.